package org.example;

import java.lang.reflect.Array;
import java.util.Arrays;

//合并两个有序数组
public class topic88 {
    //简单的将nums2中的元素全部添加到nums1中，然后进行排序
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        for (int i = 0; i < n; i++) {
            nums1[i + m] = nums2[i];
        }
        Arrays.sort(nums1);
    }

    //官方题解：双指针
    public void merge2(int[] nums1, int m, int[] nums2, int n) {
        // 创建一个临时数组来存储 nums1 的前 m 个元素
        int[] temp = new int[m];
        for (int i = 0; i < m; i++) {
            temp[i] = nums1[i];
        }
        // 初始化指针
        int i = 0; // temp 的索引
        int j = 0; // nums2 的索引
        int k = 0; // nums1 的索引
        // 从前往后合并
        while (i < m && j < n) {
            if (temp[i] <= nums2[j]) {
                nums1[k] = temp[i];
                i++;
            } else {
                nums1[k] = nums2[j];
                j++;
            }
            k++;
        }
        // 如果 temp 还有剩余元素，直接复制到 nums1 中
        while (i < m) {
            nums1[k] = temp[i];
            i++;
            k++;
        }
        // 如果 nums2 还有剩余元素，直接复制到 nums1 中
        while (j < n) {
            nums1[k] = nums2[j];
            j++;
            k++;
        }
    }
}

